import requests
import pytest
from conf.read_conf import read_conf, get_all_envs_url
import allure

"""
使用装饰器标记fixture的功能
可以使用此装饰器（带或不带参数）来定义fixture功能。 fixture功能的名称可以在以后使用
引用它会在运行测试之前调用它：test模块或类可以使用pytest.mark.usefixtures（fixturename标记。
测试功能可以直接使用fixture名称作为输入参数，在这种情况下，夹具实例从fixture返回功能将被注入。
function 每一个函数或方法都会调用
class 每一个类调用一次，一个类可以有多个方法
module，每一个.py文件调用一次，该文件内又有多个function和class
session 是多个文件调用一次，可以跨.py文件调用，每个.py文件就是module
"""


@pytest.fixture(scope="session", name="s")
def get_session():
    s = requests.Session()
    yield s


def pytest_addoption(parser):
    # 动态添加配置信息
    # addoption让用户注册一个自定义的命令行参数，方便用户将数据传递给 pytest
    parser.addoption(
        "--cmdopt", action="store", default="type1", help="my option: type1 or type2"
    )  # action="store"：默认，只存储参数的值 default：如果参数不在命令行中，则生成的默认值。
    # 添加参数到pytest.ini
    parser.addini('url', type=None, default="https://sandbox-api.yiqiwen.cn", help='添加 url 访问地址参数')


@pytest.fixture(scope="session")
def home_url(pytestconfig):
    url = pytestconfig.getini('base_url')
    return url

"""
    ------------------------------------4月新增：报告修改-----------------------------------------------
"""


# def pytest_configure(config):
#     # 添加标准 metadata（会被 Allure 自动捕获）
#     config._metadata = {
#         "测试地址": get_all_envs_url(),
#         "所属部门": read_conf("report", "department"),
#         "测试人员": read_conf("report", "user"),
#     }
#      需要配合同时生成 Allure 和 HTML 报告：pytest --alluredir=allure_results --html=report.html

def pytest_metadata(metadata):
    """
        通过 pytest-metadata 插件传递环境信息
        需要下载pip install pytest-metadata
    """
    metadata.update({
        "测试地址": get_all_envs_url(),
        "所属部门": read_conf("report", "department"),
        "测试人员": read_conf("report", "user"),
    })
    return metadata
